package com.loveto.service;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.loveto.common.JsonUtils;
import com.loveto.constant.LovetoConstant;


public class LoginMainActivity extends BaseActivity implements
View.OnClickListener{
	
	// 사용하는 변수들
	private Intent intentMoveToPage;
	private AlertDialog.Builder myAlert;
	private ProgressDialog progressDialog;
	private boolean isCorrectID;
	private String userDeviceID;
	private String local;
	private String local_detail;
	private String age;
	private String job;
	private String height;
	private String photo_url1;
	private int point;
	private String suspend_date;
	private String suspend_reason;
	private String isGetFirstBonus;
	private int firstBonus;
	
	private static String EMAIL = "seongminwoo@gmail.com"; // 개발자이메일주소
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.loveto_login_main);
		
		Log.d("tag", "login Page");
		
		//변수 초기화
		myAlert = new AlertDialog.Builder(this);
		myAlert.setNeutralButton("확인", null);
		progressDialog = new ProgressDialog(this);
		isCorrectID = false;
		isGetFirstBonus = "";
		firstBonus = 0;
		
		//클릭 리스너 달기
		((RelativeLayout)findViewById(R.id.btn_goto_back)).setOnClickListener(this);
		((RelativeLayout)findViewById(R.id.btn_join)).setOnClickListener(this);
		((RelativeLayout)findViewById(R.id.btn_login)).setOnClickListener(this);
		((LinearLayout)findViewById(R.id.btn_view_explain)).setOnClickListener(this);
		((LinearLayout)findViewById(R.id.btn_find_id)).setOnClickListener(this);
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.btn_join:
				intentMoveToPage = new Intent(LoginMainActivity.this,LoginJoinActivity.class);
				startActivity(intentMoveToPage);
				break;
			case R.id.btn_login:
				if (isNetworkAvailableAndNotice()) {
					login();
				}
				break;
			case R.id.btn_find_id:
				intentMoveToPage = new Intent(LoginMainActivity.this,LoginFindIdActivity.class);
				startActivity(intentMoveToPage);
				break;
			case R.id.btn_view_explain:
				intentMoveToPage = new Intent(LoginMainActivity.this,ExplainTournamentActivity.class);
				startActivity(intentMoveToPage);
				break;
			case R.id.btn_goto_back:
				finish();
				break;
		}
	}
	
	//로그인 시도하기
	private void login() {
		
		String inputID = ((EditText)findViewById(R.id.input_id)).getText().toString();
		String inputPassword = ((EditText)findViewById(R.id.input_password)).getText().toString();
		
		if ("".equals(inputID)) {
			myAlert.setMessage("아이디를 입력해주세요.").show();
			return;
		} else if ("".equals(inputPassword)) {
			myAlert.setMessage("비밀번호를 입력해주세요.").show();
			return;
		}
		
		progressDialog.setMessage("정보를 확인하는 중입니다.");
		progressDialog.show();
		
		//디바이스  ID (IMEI) 가져오기
		final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
		String deviceID = "" + tm.getDeviceId();
		//와이파이 맥어드레스 가져오기
		final WifiManager wm = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
		WifiInfo winfo = wm.getConnectionInfo();
		String macAdress = "" + winfo.getMacAddress();
		//디바이스 ID 는 IMEI or 맥어드래스 (전화 기능이 없는 갤탭 등에서도 사용 가능하도록)
		//http://blog.daum.net/han24_2/3041614 참고
		if (deviceID.length() > 5) { //IMEI 가 null 이 아니거나 어느정도 값이 있을 때 유저 deviceID 는 IMEI 로 결정.
			userDeviceID = deviceID;
		} else {
			userDeviceID = macAdress; //IMEI 가 null 이거나 값이 너무 적으면 유저 deviceID 는 mac어드레스로 대체 됨. 
		}
		Log.d("tag", "loginTry start");
		try {
			//서버에 정보 보내기
			StringBuffer url = new StringBuffer(LovetoConstant.LOGIN_TRY);
			url.append("?memberid=").append(URLEncoder.encode(inputID, "UTF-8"));
			url.append("&memberpassword=").append(URLEncoder.encode(inputPassword, "UTF-8"));
			url.append("&phone_uid=").append(URLEncoder.encode(userDeviceID, "UTF-8"));
			Log.d("tag", "url : " + url.toString());
			String jsonText = JsonUtils.getStringFromUrl(url.toString());
			Log.d("tag", "jsonText : " + jsonText);
			//JSONArray jsonArray = new JSONArray(jsonText);
			JSONObject object = new JSONObject(jsonText);
			String result = object.getString("result");
			Log.d("tag", "result : " + result);
			String err = object.getString("err");
			Log.d("tag", "err : " + err);
			String gender = object.getString("gender");
			Log.d("tag", "gender : " + gender);
			local = object.getString("local");
			Log.d("tag", "local : " + local);
			local_detail = object.getString("local_detail");
			Log.d("tag", "local_detail : " + local_detail);
			age = object.getString("age");
			Log.d("tag", "age : " + age);
			job = object.getString("job");
			Log.d("tag", "job : " + job);
			height = object.getString("height");
			Log.d("tag", "height : " + height);
			photo_url1 = object.getString("photo_url1");
			Log.d("tag", "photo_url1 : " + photo_url1);
			point = object.getInt("point");
			Log.d("tag", "point : " + point);
			suspend_date = object.getString("suspend_date");
			Log.d("tag", "suspend_date : " + suspend_date);
			suspend_reason = object.getString("suspend_reason");
			Log.d("tag", "suspend_reason : " + suspend_reason);
			isGetFirstBonus = object.getString("get_firstbonus_yn");
			Log.d("tag", "get_firstbonus_yn : " + isGetFirstBonus);
			firstBonus = object.getInt("first_bonus");
			Log.d("tag", "firstBonus : " + firstBonus);
			if ("F".equals(result)) {
				if ("noHaveID".equals(err)) {
					myAlert.setMessage("존재하지 않는 아이디입니다.").show();
				} else if ("wrongPassword".equals(err)) {
					myAlert.setMessage("비밀번호가 맞지않습니다.").show();
				} else if ("DBInsertError".equals(err)) {
					myAlert.setMessage("정보를 불러오는데 실패했습니다. 다시 시도해주세요.").show();
				} else if ("SuspendedID".equals(err)) {
					StringBuffer sb = new StringBuffer();
					sb.append(suspend_date).append(" 까지 이용정지상태입니다. 정지기간 동안 정상적인 서비스 이용을 할 수 없습니다.");
					sb.append(" [사유 : ").append(suspend_reason).append("]");
					myAlert.setMessage(sb.toString()).show();
				} 
			} else if ("T".equals(result)) { //정확한 아이디와 비밀번호 일때 처리
				SharedPreferences pref = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
				Editor editor = pref.edit();
				editor.clear(); //초기화
				editor.putString("memberid", inputID); //로컬에 아이디값 입력
				if ("M".equals(gender)) {
					editor.putString("gender", "M"); //로컬에 성별 입력
				} else if ("F".equals(gender)) {
					editor.putString("gender", "F");
				}
				editor.putString("phone_uid", userDeviceID); //로컬에 디바이스 아이디 입력 (로그인 할 때 단 한번 디바이스 아이디가 입렵 되며, 중요할 때 인증키 역할을 함)
				editor.putString("local", local); //지역
				editor.putString("local_detail", local_detail); //상세지역 
				editor.putString("age", age); //나이 
				editor.putString("job", job); //직업 
				editor.putString("height", height); //키 
				editor.putString("photo_url1", photo_url1); //기본사진 
				editor.putInt("point", point); //포인트
				editor.putString("clientLocal", "전체지역"); //메인화면 검색 기본값
				editor.putString("clientGender", "전체성별"); //메인화면 검색 기본값
				editor.putString("clientOrder", "최신순"); //메인화면 검색 기본값
				editor.commit();
				isCorrectID = true;
				
				// 디바이스 인증키 획득
				// Android C2DM에 Push 메시지를 받겠다는 메시지를 보내는 Intent
				Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
				registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
				registrationIntent.putExtra("sender", EMAIL);
				startService(registrationIntent);
			}
		} catch (JSONException e) {
			e.printStackTrace();
			Log.d("tag", "setRoundInfo() error, " + e.getMessage());
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			Log.d("tag", "setRoundInfo() error, " + e.getMessage());
		} finally {
			progressDialog.dismiss();
			if (isCorrectID) {
				showAlertLoginSuccess();
			}
		}
		Log.d("tag", "loginTry end");
	}
	
    private void showAlertLoginSuccess() {
    	new AlertDialog.Builder(this)
    	.setTitle("로그인 성공!")
    	.setMessage("메인페이지로 이동합니다.")
    	.setPositiveButton("확인", new DialogInterface.OnClickListener()
    	{
    		@Override
    		public void onClick(DialogInterface dialog, int which)
    		{
				//키보드 내리기
    			EditText inputID = (EditText) findViewById(R.id.input_id);
				EditText inputPassword = (EditText) findViewById(R.id.input_password);
    			InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	        	mgr.hideSoftInputFromWindow(inputID.getWindowToken(), 0);
	        	mgr.hideSoftInputFromWindow(inputPassword.getWindowToken(), 0);
    			
	        	//액티비티 전환
	        	intentMoveToPage = new Intent(LoginMainActivity.this,LovotoMainActivity.class);
    			if ("N".equals(isGetFirstBonus)) {
    				intentMoveToPage.putExtra("isGetFirstBonus", "N");
    				intentMoveToPage.putExtra("firstBonus", firstBonus);
    			}
    			startActivity(intentMoveToPage);
    			finish();
    			dialog.dismiss();
    		}
    	})
    	.show();
    }
    
}
